x86: segment attribute handling adjustments
authorJan Beulich <jbeulich@suse.com>
Thu, 9 Feb 2017 09:22:55 +0000 (10:22 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 9 Feb 2017 09:22:55 +0000 (10:22 +0100)
commitb843de7f541037e8ff5779a017b837c71e7804af
treec4f8597a0511cffa65e9a4985fc4bb991a89b8f2
parentba7e250cc48d068b3777ffddc2bb8b2f43d05e53
x86: segment attribute handling adjustments

Null selector loads into SS (possible in 64-bit mode only, and only in
rings other than ring 3) must not alter SS.DPL. (This was found to be
an issue on KVM, and fixed in Linux commit 33ab91103b.)

Further arch_set_info_hvm_guest() didn't make sure that the ASSERT()s
in hvm_set_segment_register() wouldn't trigger: Add further checks, but
tolerate (adjust) clear accessed (CS, SS, DS, ES) and busy (TR) bits.

Finally the setting of the accessed bits for user segments was lost by
commit dd5c85e312 ("x86/hvm: Reposition the modification of raw segment
data from the VMCB/VMCS"), yet VMX requires them to be set for usable
segments. Add respective ASSERT()s (the only path not properly setting
them was arch_set_info_hvm_guest()).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: 366ff5f1b3252f9069d5aedb2ffc2567bb0a37c9
master date: 2017-01-20 14:39:12 +0100
xen/arch/x86/domain.c
xen/arch/x86/x86_emulate/x86_emulate.c